Example #1
0
        public void SendRequest(MsgCode protocolCode, byte[] data, ClientType type = ClientType.Tcp, Action onRequestSuccess = null, Action onResquestFailed = null, int resendTimes = 1)
        {
            DebugUtils.Log(DebugUtils.Type.Protocol, "try to send protocol " + protocolCode);

            if (notifySendThreadClosed)
            {
                DebugUtils.Log(DebugUtils.Type.Protocol, "Network message thread has been shutdown when trying to send protocol " + protocolCode);
                return;
            }

            if (type == ClientType.Tcp)
            {
                ClientTcpMessage message = new ClientTcpMessage((int)protocolCode, data, tcpSequence++);

                if (onRequestSuccess != null)
                {
                    message.OnRequestSuccess += onRequestSuccess;
                }

                if (onResquestFailed != null)
                {
                    message.OnRequestFailed += onResquestFailed;
                }

                tcpSendingQueue.Enqueue(message);

                NetworkAlert.StartWaiting(serverType, message, resendTimes);
            }
            else if (type == ClientType.Udp)
            {
                ClientUdpMessage[] messages = ClientUdpMessage.CreateUdpMessages((int)protocolCode, ref udpSequence, udpAck, data);
                int j = 0;
                for ( ; j < messages.Length; j++)
                {
                    udpSendingQueue.Enqueue(messages[j]);
                }

                if (onRequestSuccess != null)
                {
                    messages[j].OnRequestSuccess += onRequestSuccess;
                }

                if (onResquestFailed != null)
                {
                    messages[j].OnRequestFailed += onResquestFailed;
                }
            }
            else
            {
                DebugUtils.LogError(DebugUtils.Type.AsyncSocket, string.Format("There is no such client type {0} to send request!", type));
            }
        }
Example #2
0
        public void Reconnect(ClientType clientType, Action <ClientType> ReconnectSuccessCallback = null, Action <ClientType> ReconnectFailCallback = null)
        {
            if ((clientType == ClientType.Tcp || clientType == ClientType.Both) && (tcpClient != null && !tcpClient.IsConnected()))
            {
                ClearTcpClientMessage();
                //TODO
                tcpSequence = 0;
                NetworkAlert.ResetWaitingMessages(serverType);
                tcpClient.Reconnect(ReconnectSuccessCallback, ReconnectFailCallback);
            }

            if ((clientType == ClientType.Udp || clientType == ClientType.Both) && (udpClient != null && !udpClient.IsConnected()))
            {
                ClearUdpClientMessage();
                udpSequence = 0;
                udpClient.Reconnect(ReconnectSuccessCallback, ReconnectFailCallback);
            }
        }
Example #3
0
        public void Shutdown(Action ShutdownSuccessCallback = null)
        {
            OnShutdownSuccess      = ShutdownSuccessCallback;
            notifySendThreadClosed = true;

            if (tcpClient != null)
            {
                tcpClient.Disconnect(() => {
                    tcpClientClosed = true;
                    if (udpClientClosed && sendingThreadClosed)
                    {
                        Loom.QueueOnMainThread(() => {
                            NetworkAlert.ResetWaitingMessages(serverType);
                            if (OnShutdownSuccess != null)
                            {
                                OnShutdownSuccess();
                                OnShutdownSuccess = null;
                            }
                        });
                    }
                });
            }

            if (udpClient != null)
            {
                udpClient.Disconnect(() => {
                    udpClientClosed = true;
                    if (tcpClientClosed && sendingThreadClosed)
                    {
                        Loom.QueueOnMainThread(() => {
                            NetworkAlert.ResetWaitingMessages(serverType);
                            if (OnShutdownSuccess != null)
                            {
                                OnShutdownSuccess();
                                OnShutdownSuccess = null;
                            }
                        });
                    }
                });
            }
        }
Example #4
0
        public void TcpResponseHandler(ServerTcpMessage[] messages)
        {
            //UiWaiting.InterruptWaitingTimer();

            for (int j = 0; j < messages.Length; j++)
            {
                ServerTcpMessage m = messages[j];

                Loom.QueueOnMainThread(() => {
                    NetworkAlert.OnReceiving(serverType, m);
                    Action <byte[]> handler;
                    if (serverMessageHandlers.TryGetValue(m.protocalCode, out handler))
                    {
                        DebugUtils.Log(DebugUtils.Type.Protocol, "The client handles the received protocol " + m.protocalCode);
                        handler(m.data);
                    }
                    else
                    {
                        DebugUtils.LogError(DebugUtils.Type.Protocol, "For now, the client can't handles the received protocol " + m.protocalCode);
                    }
                });
            }
        }