diff --git a/socket.io/index.d.ts b/socket.io/index.d.ts
index 2333dc8fe2..9eafcec6a1 100644
--- a/socket.io/index.d.ts
+++ b/socket.io/index.d.ts
@@ -1,6 +1,6 @@
// Type definitions for socket.io 1.4.4
// Project: http://socket.io/
-// Definitions by: PROGRE , Damian Connolly , Florent Poujol
+// Definitions by: PROGRE , Damian Connolly , Florent Poujol , KentarouTakeda
// Definitions: https://github.com/DefinitelyTyped/DefinitelyTyped
///
@@ -472,7 +472,7 @@ declare namespace SocketIO {
* as we have a problem with the emit() event (as it's overridden with a
* different return)
*/
- interface Socket {
+ interface Socket extends NodeJS.EventEmitter{
/**
* The namespace that this socket is for
@@ -509,28 +509,7 @@ declare namespace SocketIO {
/**
* The underlying Engine.io Socket instance
*/
- conn: {
-
- /**
- * The ID for this socket - matches Client.id
- */
- id: string;
-
- /**
- * The Engine.io Server for this socket
- */
- server: any;
-
- /**
- * The ready state for the client. Either 'opening', 'open', 'closing', or 'closed'
- */
- readyState: string;
-
- /**
- * The remote IP for this connection
- */
- remoteAddress: string;
- };
+ conn: EngineSocket;
/**
* The list of rooms that this Socket is currently in, where
@@ -613,17 +592,6 @@ declare namespace SocketIO {
*/
broadcast: Socket;
- /**
- * Emits an event to this client. If the 'broadcast' flag was set, this will
- * emit to all other clients, except for this one
- * @param event The event that we want to emit
- * @param args Any number of optional arguments to pass with the event. If the
- * last argument is a function, it will be called as an ack. The ack should
- * take whatever data was sent with the packet
- * @return This Socket
- */
- emit( event: string, ...args: any[]): Socket;
-
/**
* Targets a room when broadcasting
* @param room The name of the room that we're targeting
@@ -677,53 +645,6 @@ declare namespace SocketIO {
*/
disconnect( close?: boolean ): Socket;
- /**
- * Adds a listener for a particular event. Calling multiple times will add
- * multiple listeners
- * @param event The event that we're listening for
- * @param fn The function to call when we get the event. Parameters depend on the
- * event in question
- * @return This Socket
- */
- on( event: string, fn: Function ): Socket;
-
- /**
- * @see on( event, fn )
- */
- addListener( event: string, fn: Function ): Socket;
-
- /**
- * Adds a listener for a particular event that will be invoked
- * a single time before being automatically removed
- * @param event The event that we're listening for
- * @param fn The function to call when we get the event. Parameters depend on
- * the event in question
- * @return This Socket
- */
- once( event: string, fn: Function ): Socket;
-
- /**
- * Removes a listener for a particular type of event. This will either
- * remove a specific listener, or all listeners for this type of event
- * @param event The event that we want to remove the listener of
- * @param fn The function to remove, or null if we want to remove all functions
- * @return This Socket
- */
- removeListener( event: string, fn?: Function ): Socket;
-
- /**
- * Removes all event listeners on this object
- * @return This Socket
- */
- removeAllListeners( event?: string ): Socket;
-
- /**
- * Sets the maximum number of listeners this instance can have
- * @param n The max number of listeners we can add to this emitter
- * @return This Socket
- */
- setMaxListeners( n: number ): Socket;
-
/**
* Returns all the callbacks for a particular event
* @param event The event that we're looking for the callbacks of
@@ -809,28 +730,7 @@ declare namespace SocketIO {
/**
* The underlying Engine.io Socket instance
*/
- conn: {
-
- /**
- * The ID for this socket - matches Client.id
- */
- id: string;
-
- /**
- * The Engine.io Server for this socket
- */
- server: any;
-
- /**
- * The ready state for the client. Either 'opening', 'open', 'closing', or 'closed'
- */
- readyState: string;
-
- /**
- * The remote IP for this connection
- */
- remoteAddress: string;
- };
+ conn: EngineSocket;
/**
* The ID for this client. Regenerated at every connection
@@ -855,4 +755,44 @@ declare namespace SocketIO {
*/
nsps: {[nsp: string]: Socket};
}
+
+ /**
+ * A reference to the underlying engine.io Socket connection.
+ */
+ interface EngineSocket extends NodeJS.EventEmitter {
+ /**
+ * The ID for this socket - matches Client.id
+ */
+ id: string;
+
+ /**
+ * The Engine.io Server for this socket
+ */
+ server: any;
+
+ /**
+ * The ready state for the client. Either 'opening', 'open', 'closing', or 'closed'
+ */
+ readyState: string;
+
+ /**
+ * The remote IP for this connection
+ */
+ remoteAddress: string;
+
+ /**
+ * whether the transport has been upgraded
+ */
+ upgraded: boolean;
+
+ /**
+ * (http.IncomingMessage): request that originated the Socket
+ */
+ request: any;
+
+ /**
+ * (Transport): transport reference
+ */
+ transport: any;
+ }
}
diff --git a/socket.io/socket.io-tests.ts b/socket.io/socket.io-tests.ts
index ea3d97e21f..23c4a6d996 100644
--- a/socket.io/socket.io-tests.ts
+++ b/socket.io/socket.io-tests.ts
@@ -144,6 +144,22 @@ function testUsingItJustAsACrossBrowserWebSocket() {
});
}
+function testSocketConnection() {
+ var io = socketIO.listen(80);
+
+ io.sockets.on('connection', function (socket) {
+ console.log(socket.client.conn === socket.conn);
+ console.log(socket.client.request.httpVersion);
+ console.log(socket.conn.id);
+ console.log(socket.conn.upgraded);
+ console.log(socket.conn.readyState);
+
+ socket.on('packet', function(message :string, ping :string){
+ console.log(message, ping);
+ });;
+ });
+}
+
function testClosingServerWithCallback() {
var io = socketIO.listen(80);
io.close(function() {