示例#1
0
 public void ConnectToGameServer(Msg_C2G_Hello helloBody, IPEndInfo _gameTcpEnd, bool isReconnect)
 {
     Log("ConnectToGameServer  " + helloBody + " isReconnect=" + isReconnect);
     IsReconnecting = isReconnect;
     ResetStatus();
     this.helloBody = helloBody.Hello;
     InitNetClient(ref _netTcp, _gameTcpEnd.Ip, _gameTcpEnd.Port, () => {
         HasConnGameTcp = true;
         CurGameState   = EGameState.Loading;
         _netTcp.SendMessage(EMsgSC.C2G_Hello, helloBody, (status, respond) => {
             if (status != EResponseStatus.Failed)
             {
                 var rMsg    = respond.Parse <Msg_G2C_Hello>();
                 _curMapId   = rMsg.MapId;
                 _localId    = rMsg.LocalId;
                 _gameUdpEnd = rMsg.UdpEnd;
                 _handler.OnTcpHello(rMsg);
                 ConnectUdp();
             }
             else
             {
                 _handler.OnGameStartFailed();
             }
         }
                             );
     });
 }
示例#2
0
 public void ConnectToGameServer(Msg_C2G_Hello helloBody, IPEndInfo _gameTcpEnd, bool isReconnect)
 {
     IsReconnecting = isReconnect;
     ResetStatus();
     this.helloBody = helloBody.Hello;
     ConnectUdp();
     SendTcp(EMsgSC.C2L_JoinRoom, new Msg_C2L_JoinRoom
     {
         RoomId = 0
     });
 }
        private async ValueTask OnNewConnection(NewConnectionEventArgs e)
        {
            MessageHello.Deserialize(e.HandshakeData, out int announcementVersion, out int id, out Language language);

            _logger.LogDebug("Client requested announcement (version: {Version}, id: {Id}, language: {Language})", announcementVersion, id, language);

            if (announcementVersion != 2)
            {
                await e.Connection.Disconnect("Unsupported announcement version");

                return;
            }

            var @event = new AnnouncementRequestEvent(id, language);
            await _eventManager.CallAsync(@event);

            var response = @event.Response;

            if (response.UseCached)
            {
                using var writer = MessageWriter.Get(MessageType.Reliable);
                Message00UseCache.Serialize(writer);
                await e.Connection.SendAsync(writer);

                _logger.LogDebug("Sent UseCache response");
            }

            if (response.Announcement != null)
            {
                using var writer = MessageWriter.Get(MessageType.Reliable);
                Announcement announcement = response.Announcement.Value;
                Message01Update.Serialize(writer, announcement.Id, announcement.Message);
                await e.Connection.SendAsync(writer);

                _logger.LogDebug("Sent ({Id}) {Message}", announcement.Id, announcement.Message);
            }

            if (response.FreeWeekendState != FreeWeekendState.NotFree)
            {
                using var writer = MessageWriter.Get(MessageType.Reliable);
                Message02SetFreeWeekend.Serialize(writer, response.FreeWeekendState);
                await e.Connection.SendAsync(writer);

                _logger.LogDebug("Sent {FreeWeekendState} weekend state", response.FreeWeekendState);
            }

            await e.Connection.Disconnect(null);
        }
示例#4
0
        public void AddWorker(Person person, int hour)
        {
            workers.Add(person);
            person.Came += new EventHandler(Person_Came);
            person.OnCame();
            if (greetByUs != null)
            {
                greetByUs(person, hour);
            }
            MessageHello greetByPerson = new MessageHello(person.Greet);

            greetByUs += greetByPerson;
            MessageBye byeByPerson = new MessageBye(person.GoodBye);

            byeByUs += byeByPerson;
        }
示例#5
0
        public void RemoveWorker(Person person)
        {
            MessageHello greetByPerson = new MessageHello(person.Greet);

            greetByUs   -= greetByPerson;
            person.Came -= new EventHandler(Person_Came);
            workers.Remove(person);
            person.Gone += new EventHandler(Person_Gone);
            person.IsGone();
            MessageBye byeByPerson = new MessageBye(person.GoodBye);

            byeByUs -= byeByPerson;
            if (byeByUs != null)
            {
                byeByUs(person);
            }
            person.Gone -= new EventHandler(Person_Gone);
        }
示例#6
0
        private async ValueTask OnNewConnection(NewConnectionEventArgs e)
        {
            MessageHello.Deserialize(e.HandshakeData, out var announcementVersion, out var id, out var language);

            if (announcementVersion != 2)
            {
                await e.Connection.Disconnect("Unsupported announcement version");

                return;
            }

            var @event = new AnnouncementRequestEvent(id, language);
            await _eventManager.CallAsync(@event);

            var response = @event.Response;

            if (response.UseCached)
            {
                using var writer = MessageWriter.Get(MessageType.Reliable);
                Message00UseCache.Serialize(writer);
                await e.Connection.SendAsync(writer);
            }

            if (response.Announcement != null)
            {
                using var writer = MessageWriter.Get(MessageType.Reliable);
                var announcement = response.Announcement.Value;
                Message01Update.Serialize(writer, announcement.Id, announcement.Message);
                await e.Connection.SendAsync(writer);
            }

            if (response.FreeWeekendState != FreeWeekendState.NotFree)
            {
                using var writer = MessageWriter.Get(MessageType.Reliable);
                Message02SetFreeWeekend.Serialize(writer, response.FreeWeekendState);
                await e.Connection.SendAsync(writer);
            }

            await e.Connection.Disconnect(null);
        }