-
Notifications
You must be signed in to change notification settings - Fork 12
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
1.登录 2.点对点即时消息,含图片、表情、带内文件 3.企业通讯录(群聊)
- Loading branch information
Showing
1,250 changed files
with
145,979 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,116 @@ | ||
/* | ||
* Copyright 2009 Mike Cumings | ||
* | ||
* Licensed under the Apache License, Version 2.0 (the "License"); | ||
* you may not use this file except in compliance with the License. | ||
* You may obtain a copy of the License at | ||
* | ||
* http://www.apache.org/licenses/LICENSE-2.0 | ||
* | ||
* Unless required by applicable law or agreed to in writing, software | ||
* distributed under the License is distributed on an "AS IS" BASIS, | ||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | ||
* See the License for the specific language governing permissions and | ||
* limitations under the License. | ||
*/ | ||
|
||
package com.kenai.jbosh; | ||
|
||
/** | ||
* Abstract base class for creating BOSH attribute classes. Concrete | ||
* implementations of this class will naturally inherit the underlying | ||
* type's behavior for {@code equals()}, {@code hashCode()}, | ||
* {@code toString()}, and {@code compareTo()}, allowing for the easy | ||
* creation of objects which extend existing trivial types. This was done | ||
* to comply with the prefactoring rule declaring, "when you are being | ||
* abstract, be abstract all the way". | ||
* | ||
* @param <T> type of the extension object | ||
*/ | ||
abstract class AbstractAttr<T extends Comparable> | ||
implements Comparable { | ||
|
||
/** | ||
* Captured value. | ||
*/ | ||
private final T value; | ||
|
||
/** | ||
* Creates a new encapsulated object instance. | ||
* | ||
* @param aValue encapsulated getValue | ||
*/ | ||
protected AbstractAttr(final T aValue) { | ||
value = aValue; | ||
} | ||
|
||
/** | ||
* Gets the encapsulated data value. | ||
* | ||
* @return data value | ||
*/ | ||
public final T getValue() { | ||
return value; | ||
} | ||
|
||
/////////////////////////////////////////////////////////////////////////// | ||
// Object method overrides: | ||
|
||
/** | ||
* {@inheritDoc} | ||
* | ||
* @param otherObj object to compare to | ||
* @return true if the objects are equal, false otherwise | ||
*/ | ||
@Override | ||
public boolean equals(final Object otherObj) { | ||
if (otherObj == null) { | ||
return false; | ||
} else if (otherObj instanceof AbstractAttr) { | ||
AbstractAttr other = | ||
(AbstractAttr) otherObj; | ||
return value.equals(other.value); | ||
} else { | ||
return false; | ||
} | ||
} | ||
|
||
/** | ||
* {@inheritDoc} | ||
* | ||
* @return hashCode of the encapsulated object | ||
*/ | ||
@Override | ||
public int hashCode() { | ||
return value.hashCode(); | ||
} | ||
|
||
/** | ||
* {@inheritDoc} | ||
* | ||
* @return string representation of the encapsulated object | ||
*/ | ||
@Override | ||
public String toString() { | ||
return value.toString(); | ||
} | ||
|
||
/////////////////////////////////////////////////////////////////////////// | ||
// Comparable interface: | ||
|
||
/** | ||
* {@inheritDoc} | ||
* | ||
* @param otherObj object to compare to | ||
* @return -1, 0, or 1 | ||
*/ | ||
@SuppressWarnings("unchecked") | ||
public int compareTo(final Object otherObj) { | ||
if (otherObj == null) { | ||
return 1; | ||
} else { | ||
return value.compareTo(otherObj); | ||
} | ||
} | ||
|
||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,104 @@ | ||
/* | ||
* Copyright 2009 Mike Cumings | ||
* | ||
* Licensed under the Apache License, Version 2.0 (the "License"); | ||
* you may not use this file except in compliance with the License. | ||
* You may obtain a copy of the License at | ||
* | ||
* http://www.apache.org/licenses/LICENSE-2.0 | ||
* | ||
* Unless required by applicable law or agreed to in writing, software | ||
* distributed under the License is distributed on an "AS IS" BASIS, | ||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | ||
* See the License for the specific language governing permissions and | ||
* limitations under the License. | ||
*/ | ||
|
||
package com.kenai.jbosh; | ||
|
||
import java.util.Collections; | ||
import java.util.Map; | ||
import java.util.Set; | ||
|
||
/** | ||
* Class representing a single message to or from the BOSH connection | ||
* manager (CM). | ||
* <p/> | ||
* These messages consist of a single {@code body} element | ||
* (qualified within the BOSH namespace: | ||
* {@code http://jabber.org/protocol/httpbind}) and contain zero or more | ||
* child elements (of any namespace). These child elements constitute the | ||
* message payload. | ||
* <p/> | ||
* In addition to the message payload, the attributes of the wrapper | ||
* {@code body} element may also need to be used as part of the communication | ||
* protocol being implemented on top of BOSH, or to define additional | ||
* namespaces used by the child "payload" elements. These attributes are | ||
* exposed via accessors. | ||
*/ | ||
public abstract class AbstractBody { | ||
|
||
/////////////////////////////////////////////////////////////////////////// | ||
// Constructor: | ||
|
||
/** | ||
* Restrict subclasses to the local package. | ||
*/ | ||
AbstractBody() { | ||
// Empty | ||
} | ||
|
||
/////////////////////////////////////////////////////////////////////////// | ||
// Public methods: | ||
|
||
/** | ||
* Get a set of all defined attribute names. | ||
* | ||
* @return set of qualified attribute names | ||
*/ | ||
public final Set<BodyQName> getAttributeNames() { | ||
Map<BodyQName, String> attrs = getAttributes(); | ||
return Collections.unmodifiableSet(attrs.keySet()); | ||
} | ||
|
||
/** | ||
* Get the value of the specified attribute. | ||
* | ||
* @param attr name of the attribute to retriece | ||
* @return attribute value, or {@code null} if not defined | ||
*/ | ||
public final String getAttribute(final BodyQName attr) { | ||
Map<BodyQName, String> attrs = getAttributes(); | ||
return attrs.get(attr); | ||
} | ||
|
||
/////////////////////////////////////////////////////////////////////////// | ||
// Abstract methods: | ||
|
||
/** | ||
* Get a map of all defined attribute names with their corresponding values. | ||
* | ||
* @return map of qualified attributes | ||
*/ | ||
public abstract Map<BodyQName, String> getAttributes(); | ||
|
||
/** | ||
* Get an XML String representation of this message. | ||
* | ||
* @return XML string representing the body message | ||
*/ | ||
public abstract String toXML(); | ||
|
||
/////////////////////////////////////////////////////////////////////////// | ||
// Package-private methods: | ||
|
||
/** | ||
* Returns the qualified name of the root/wrapper element. | ||
* | ||
* @return qualified name | ||
*/ | ||
static BodyQName getBodyQName() { | ||
return BodyQName.createBOSH("body"); | ||
} | ||
|
||
} |
Oops, something went wrong.