예제 #1
0
    void OnGUI()
    {
        // Input text
        message = GUI.TextArea(new Rect(0, 10, Screen.width * 0.7f, Screen.height / 10), message);

        // Send message button
        if (GUI.Button(new Rect(Screen.width * 0.75f, 10, Screen.width * 0.2f, Screen.height / 10), "Send")){
            //SendChatMessage();
            // SocketConnectionClosed();

            JSONMessage json = new JSONMessage();

            Debug.Log(json);
            this.socket.Emit("message", message);
            message="";
        }

        /*
        // Show chat messages
        var l = string.Join("\n", messages.ToArray());
        var height = Screen.height * 0.1f * messages.Count;
        GUI.Label(
            new Rect(0, Screen.height * 0.2f + 10, Screen.width * 0.8f, height), l);
        */
    }
예제 #2
0
        public static JSONMessage Deserialize(string rawMessage)
        {
            JSONMessage jsonMsg = new JSONMessage();
            var         groups  = Messages.Message.ReMessageType.Match(rawMessage).Groups;

            jsonMsg.RawMessage  = groups[0].Value;
            jsonMsg.Event       = groups[1].Value;
            jsonMsg.MessageText = groups[2].Value;
            return(jsonMsg);
        }
예제 #3
0
        public static IMessage Factory(string rawMessage)
        {
            if (reMessageType.IsMatch(rawMessage))
            {
                char id = rawMessage.First();
                switch (id)
                {
                case '0':
                    return(DisconnectMessage.Deserialize(rawMessage));

                case '1':
                    return(ConnectMessage.Deserialize(rawMessage));

                case '2':
                    return(new Heartbeat());

                case '3':
                    return(TextMessage.Deserialize(rawMessage));

                case '4':
                    return(JSONMessage.Deserialize(rawMessage));

                case '5':
                    return(EventMessage.Deserialize(rawMessage));

                case '6':
                    return(AckMessage.Deserialize(rawMessage));

                case '7':
                    return(ErrorMessage.Deserialize(rawMessage));

                case '8':
                    return(new NoopMessage());

                default:
                    Trace.WriteLine(string.Format("Message.Factory undetermined message: {0}", rawMessage));
                    return(new TextMessage());
                }
            }
            else
            {
                Trace.WriteLine(string.Format("Message.Factory did not find matching message type: {0}", rawMessage));
                return(new NoopMessage());
            }
        }
예제 #4
0
        public static JSONMessage Deserialize(string rawMessage)
        {
            JSONMessage jsonMsg = new JSONMessage();
            //  '4:' [message id ('+')] ':' [message endpoint] ':' [json]
            //   4:1::{"a":"b"}
            jsonMsg.RawMessage = rawMessage;

            string[] args = rawMessage.Split(SPLITCHARS, 4); // limit the number of '
            if (args.Length == 4)
            {
                int id;
                if (int.TryParse(args[1], out id))
                    jsonMsg.AckId = id;
                jsonMsg.Endpoint = args[2];
                jsonMsg.MessageText = args[3];
            }
            return jsonMsg;
        }
예제 #5
0
        public static JSONMessage Deserialize(string rawMessage)
        {
            JSONMessage jsonMsg = new JSONMessage();

            //  '4:' [message id ('+')] ':' [message endpoint] ':' [json]
            //   4:1::{"a":"b"}
            jsonMsg.RawMessage = rawMessage;

            string[] args = rawMessage.Split(SPLITCHARS, 4); // limit the number of '
            if (args.Length == 4)
            {
                int id;
                if (int.TryParse(args[1], out id))
                {
                    jsonMsg.AckId = id;
                }
                jsonMsg.Endpoint    = args[2];
                jsonMsg.MessageText = args[3];
            }
            return(jsonMsg);
        }
예제 #6
0
        public void InitializeSocket()
        {
            if(_client != null)
                _client.Close();
            _client = new Client(@"https://socketio.mtgox.com");
            _client.Message += SocketClientMessage;
            _client.Error += SocketClientError;
            _client.SocketConnectionClosed += SocketClientConnectionClosed;

            if (ValidApiKey)
            {
                SubscribeUserChannel subUser = new SubscribeUserChannel(GetIdKey());
                JSONMessage userMsg = new JSONMessage(subUser, endpoint: "/mtgox") { Json = new JsonEncodedEventMessage("message", subUser) };
                SubscribeLag subLag = new SubscribeLag();
                JSONMessage lagMsg = new JSONMessage(subLag, endpoint: "/mtgox") { Json = new JsonEncodedEventMessage("message", subLag) };
                _client.On("connect", data =>
                {
                    _client.Send(userMsg);
                    _client.Send(lagMsg);
                });
            }

            _client.Connect("/mtgox");
        }
예제 #7
0
		/// <summary>
		/// <para>Asynchronously sends payload using eventName</para>
		/// <para>payload must a string or Json Serializable</para>
		/// <para>Mimicks Socket.IO client 'socket.emit('name',payload);' pattern</para>
		/// <para>Do not use the reserved socket.io event names: connect, disconnect, open, close, error, retry, reconnect</para>
		/// </summary>
		/// <param name="eventName"></param>
		/// <param name="payload">must be a string or a Json Serializable object</param>
		/// <remarks>ArgumentOutOfRangeException will be thrown on reserved event names</remarks>
		public void Emit(string eventName, dynamic payload, string endPoint = "", Action<dynamic> callback = null)
		{

			string lceventName = eventName.ToLower();
			IMessage msg = null;
			switch (lceventName)
			{
				case "message":
					if (payload is string)
						msg = new TextMessage() { MessageText = payload };
					else
						msg = new JSONMessage(payload);
					this.Send(msg);
					break;
				case "connect":
				case "disconnect":
				case "open":
				case "close":
				case "error":
				case "retry":
				case "reconnect":
					throw new System.ArgumentOutOfRangeException(eventName, "Event name is reserved by socket.io, and cannot be used by clients or servers with this message type");
				default:
					if (!string.IsNullOrWhiteSpace(endPoint) && !endPoint.StartsWith("/"))
						endPoint = "/" + endPoint;
					msg = new EventMessage(eventName, payload, endPoint, callback);
					if (callback != null)
						this.registrationManager.AddCallBack(msg);

					this.Send(msg);
					break;
			}
		}
예제 #8
0
        public static IMessage Factory(string rawMessage)
        {
            if (Check(rawMessage))
            {
                string message = rawMessage.TrimStart('0');

                return(ConnectMessage.Deserialize(message));
            }

            if (ReMessageType.IsMatch(rawMessage))
            {
                char id = rawMessage.First();
                switch (id)
                {
                case '0':
                    return(DisconnectMessage.Deserialize(rawMessage));

                case '1':
                    return(ConnectMessage.Deserialize(rawMessage));

                case '2':
                    return(new Heartbeat());

                case '3':
                    return(TextMessage.Deserialize(rawMessage));

                case '4':
                    return(JSONMessage.Deserialize(rawMessage));

                case '5':
                    return(EventMessage.Deserialize(rawMessage));

                case '6':
                    return(AckMessage.Deserialize(rawMessage));

                case '7':
                    return(ErrorMessage.Deserialize(rawMessage));

                case '8':
                    return(new NoopMessage());

                default:
                    Trace.WriteLine(string.Format("Message.Factory undetermined message: {0}", rawMessage));
                    return(new TextMessage());
                }
            }

            if (rawMessage.IndexOf("[") > 0)
            {
                // int index = rawMessage.IndexOf("[");

                return(AckMessage.Deserialize(rawMessage));
            }
            //if (rawMessage == "3")
            //{
            //    return new Heartbeat();
            //}
            else
            {
                Trace.WriteLine(string.Format("Message.Factory did not find matching message type: {0}", rawMessage));
                return(new NoopMessage());
            }
        }