Esempio n. 1
0
 void cc_updateClientEvent(ClienUpdateEventArgs e)
 {
     if (this.InvokeRequired)
     {
         InvokeRefreshServer ivo = new InvokeRefreshServer(this.cc_updateClientEvent);
         this.Invoke(ivo, e);
     }
     else
     {
         switch (e.clientupdate)
         {
             case CLIENTUPDATE.updateServer:
                 lock (serverplist)
                 {
                     var d= from u in (e.data as List<ServerClass>) orderby u.m_Serverid descending select u;
                     foreach (var v in d)
                     {
                         makeServerView(v.m_Serverid, v.m_szStationID, v.isonline);
                         if (v.m_Serverid == serverid) labelcurrent.Text = "当前连接:Serverid = " + v.m_Serverid + "  StationID = " + v.m_szStationID;
                     }
                 }
                 break;
             case CLIENTUPDATE.updateApp:
                 lock (serverplist)
                 {
                     foreach (var v in e.data as List<AppObj>)
                     {
                         UpdateAppView(cc.ServeridtoStationId(v.m_Serverid), v.app, v.isonline);
                     }
                 }
                 break;
             default:
                 break;
         }
     }
 }
Esempio n. 2
0
        void ics_updateClientEvent(ClienUpdateEventArgs e)
        {
            switch (e.clientupdate)
            {
                case CLIENTUPDATE.updateServer:
                    lock (Serverlist)
                    {
                        foreach(var v in e.data as List<ServerClass>)
                        {
                            if(Serverlist.ContainsKey(v.m_Serverid))
                            {
                                Serverlist[v.m_Serverid].server = v;
                                if(!v.isonline)
                                {
                                    foreach(var z in Serverlist[v.m_Serverid].applist)
                                    {
                                        z.Value.isonline = false;
                                    }
                                }
                            }
                            else
                            {
                                ActServer s = new ActServer();
                                s.server = v;
                                Serverlist.Add(v.m_Serverid, s);
                            }
                        }
                    }
                    if (updateClientEvent != null)
                    {
                        updateClientEvent(e);
                    }
                    break;
                case CLIENTUPDATE.updateApp:
                    lock (Serverlist)
                    {
                        foreach (var v in e.data as List<AppObj>)
                        {
                            if (Serverlist.ContainsKey(v.m_Serverid))
                            {
                               if(Serverlist[v.m_Serverid].applist.ContainsKey(v.app))
                               {
                                   Serverlist[v.m_Serverid].applist[v.app]=v;
                               }
                               else
                               {
                                   Serverlist[v.m_Serverid].applist.Add(v.app, v);
                               }
                               if (v.isonline) Serverlist[v.m_Serverid].server.isonline = true;
                            }
                        }
                    }
                    if (updateClientEvent != null)
                    {
                        List<AppObj> apps = new List<AppObj>();
                        List<APPID> appids = Communicator.getVisualApp(app.id);

                        foreach (var v in e.data as List<AppObj>)
                        {
                            if (appids.Contains(v.app)) apps.Add(v);
                        }
                        e.data = apps;
                        updateClientEvent(e);
                    }
                    break;
                default:
                    break;
            }
        }
        void ics_updateClientEvent(ClienUpdateEventArgs e)
        {
            switch (e.clientupdate)
            {
            case CLIENTUPDATE.updateServer:
                lock (Serverlist)
                {
                    foreach (var v in e.data as List <ServerClass> )
                    {
                        if (Serverlist.ContainsKey(v.m_Serverid))
                        {
                            Serverlist[v.m_Serverid].server = v;
                            if (!v.isonline)
                            {
                                foreach (var z in Serverlist[v.m_Serverid].applist)
                                {
                                    z.Value.isonline = false;
                                }
                            }
                        }
                        else
                        {
                            ActServer s = new ActServer();
                            s.server = v;
                            Serverlist.Add(v.m_Serverid, s);
                        }
                    }
                }
                if (updateClientEvent != null)
                {
                    updateClientEvent(e);
                }
                break;

            case CLIENTUPDATE.updateApp:
                lock (Serverlist)
                {
                    foreach (var v in e.data as List <AppObj> )
                    {
                        if (Serverlist.ContainsKey(v.m_Serverid))
                        {
                            if (Serverlist[v.m_Serverid].applist.ContainsKey(v.app))
                            {
                                Serverlist[v.m_Serverid].applist[v.app] = v;
                            }
                            else
                            {
                                Serverlist[v.m_Serverid].applist.Add(v.app, v);
                            }
                            if (v.isonline)
                            {
                                Serverlist[v.m_Serverid].server.isonline = true;
                            }
                        }
                    }
                }
                if (updateClientEvent != null)
                {
                    List <AppObj> apps   = new List <AppObj>();
                    List <APPID>  appids = Communicator.getVisualApp(app.id);

                    foreach (var v in e.data as List <AppObj> )
                    {
                        if (appids.Contains(v.app))
                        {
                            apps.Add(v);
                        }
                    }
                    e.data = apps;
                    updateClientEvent(e);
                }
                break;

            default:
                break;
            }
        }
Esempio n. 4
0
        //解析
        private void ParseData(byte[] buff, UInt32 buffindex, UInt32 PacketLength)
        {
            int command = (buff[buffindex] + (buff[buffindex + 1] << 8));
            if (command == (int)COMMAND_ID.COMMAND_KEEP_ALIVE_RESPONSE)
            {
            }
            else if (command == (int)COMMAND_ID.COMMAND_REG_RESPONSE)
            {
                byte Regresult = buff[buffindex + 2];
                if (Regresult == 1)
                {
                    Reged = true;
                    Reging = false;
                    sendblockEvent.Set();
                }
                else
                {
                    Reged = false;
                    Reging = false;
                    sendblockEvent.Reset();
                    Exception e = new Exception("应用注册失败,同类应用可能已经在运行。");
                    if (ExceptionEvent != null) ExceptionEvent(e);
                }
            }
            else if (command == (int)COMMAND_ID.COMMAND_PACKET_SERVERDOWN)
            {
                if (SendStatusEvent != null)
                {
                    UInt16 serverid = BitConverter.ToUInt16(buff, (int)buffindex + 2);
                    UInt32 dataid = BitConverter.ToUInt32(buff, (int)buffindex + 4);
                    lock (Synsendinglist)
                    {
                        if (sendinglist.ContainsKey(dataid))
                        {
                            SendStatusEventArgs e = new SendStatusEventArgs(SENDSTATUS.PACKET_SERVERDOWN, sendinglist[dataid]);
                            sendinglist.Remove(dataid);
                            SendStatusEvent(e);
                        }
                    }
                }
            }
            else if (command == (int)COMMAND_ID.COMMAND_PACKET_APPDOWN)
            {
                if (SendStatusEvent != null)
                {
                    UInt16 serverid = BitConverter.ToUInt16(buff, (int)buffindex + 2);
                    UInt16 sourceappid = BitConverter.ToUInt16(buff, (int)buffindex + 4);
                    UInt16 destappid = BitConverter.ToUInt16(buff, (int)buffindex + 6);
                    UInt32 dataid = BitConverter.ToUInt32(buff, (int)buffindex + 8);
                    lock (Synsendinglist)
                    {
                        if (sendinglist.ContainsKey(dataid))
                        {
                            SendStatusEventArgs e = new SendStatusEventArgs(SENDSTATUS.PACKET_APPDOWN, sendinglist[dataid]);
                            sendinglist.Remove(dataid);
                            SendStatusEvent(e);
                        }
                    }
                }
            }
            else if (command == (int)COMMAND_ID.COMMAND_PACKET_ERR)
            {
                if (SendStatusEvent != null)
                {
                    UInt32 dataid = BitConverter.ToUInt32(buff, (int)buffindex + 14);
                    lock (Synsendinglist)
                    {
                        if (sendinglist.ContainsKey(dataid))
                        {
                            SendStatusEventArgs e = new SendStatusEventArgs(SENDSTATUS.PACKET_ERR, sendinglist[dataid]);
                            sendinglist.Remove(dataid);
                            SendStatusEvent(e);
                        }
                    }
                }
            }
            else if (command == (int)COMMAND_ID.COMMAND_PACKET_RECEIVED)
            {
                if(SendStatusEvent != null)
                {
                    UInt32 dataid = BitConverter.ToUInt32(buff, (int)buffindex + 14);
                    lock (Synsendinglist)
                    {
                        if (sendinglist.ContainsKey(dataid))
                        {
                            sendinglist[dataid].outtime = DateTime.Now;
                            SendStatusEventArgs e = new SendStatusEventArgs(SENDSTATUS.PACKET_RECEIVED, sendinglist[dataid]);
                            sendinglist.Remove(dataid);
                            SendStatusEvent(e);
                        }
                    }
                }
            }
            else if (command == (int)COMMAND_ID.COMMAND_QUERY_SERVER_RESPONSE)
            {
                if(updateClientEvent != null)
                {
                    char[] trimChars = {(char)0 };
                    List<ServerClass> servers = new List<ServerClass>();
                    int servercount = BitConverter.ToUInt16(buff, (int)buffindex + 2);
                    UInt32 pos = buffindex + 4;
                    for(int i = 0; i<servercount; ++i)
                    {
                        ushort serverid = BitConverter.ToUInt16(buff, (int)pos); pos = pos + 2;
                        string stationid = Encoding.Default.GetString(buff, (int)pos, 33).Trim(trimChars); pos = pos + 33;
                        byte online = buff[pos]; ++pos;
                        ServerClass s = new ServerClass();
                        s.m_Serverid = serverid;
                        s.m_szStationID = stationid;
                        s.isonline = (online == 1);
                        servers.Add(s);
                    }
                    ClienUpdateEventArgs e = new ClienUpdateEventArgs(CLIENTUPDATE.updateServer);
                    e.data = servers;
                    updateClientEvent(e);
                }
            }
            else if ((command == (int)COMMAND_ID.COMMAND_QUERY_APP_RESPONSE) || (command == (int)COMMAND_ID.COMMAND_SYN_APP))
            {
                if (updateClientEvent != null)
                {
                    List<AppObj> applist = new List<AppObj>();
                    UInt32 pos = buffindex + 2;
                    ushort serverid = BitConverter.ToUInt16(buff, (int)pos); pos = pos + 2;
                    ushort appcount = BitConverter.ToUInt16(buff, (int)pos); pos = pos + 2;
                    for (int i = 0; i < appcount; ++i)
                    {
                        ushort appid = BitConverter.ToUInt16(buff, (int)pos); pos = pos + 2;
                        byte isadd = buff[pos]; ++pos;
                        AppObj a = new AppObj();
                        a.m_Serverid = serverid;
                        a.app = (APPID)appid;
                        a.isonline = (isadd == 1);
                        applist.Add(a);
                    }
                    ClienUpdateEventArgs e = new ClienUpdateEventArgs(CLIENTUPDATE.updateApp);
                    e.data = applist;
                    updateClientEvent(e);
                }
            }
            //接受到数据包
            else if (command == (int)COMMAND_ID.COMMAND_PACKET)
            {
                if (ReceivedEvent != null)
                {
                    const int CommnadSize = 2;     //命令大小
                    const int ConnectSize = 12;     //连接大小
                    const int DataidSize = 4;      //数据块编号大小
                    const int DataLengthSize = 4;  //数据块长度大小
                    const int DataOffsetSize = 4;  //数据块偏移大小
                    const int MD5Length = 16;
                    const int PacketHead = CommnadSize + ConnectSize + DataidSize + DataLengthSize + DataOffsetSize;
                    bool datacorrect = true;
                    UInt16 SourServerid = BitConverter.ToUInt16(buff, (int)buffindex + 2);
                    UInt16 DestServerid = BitConverter.ToUInt16(buff, (int)buffindex + 4);
                    UInt16 SourAppid = BitConverter.ToUInt16(buff, (int)buffindex + 6);
                    UInt16 DestAppid = BitConverter.ToUInt16(buff, (int)buffindex + 8);
                    UInt32 connid = BitConverter.ToUInt32(buff, (int)buffindex + 10);
                    UInt32 dataid = BitConverter.ToUInt32(buff, (int)buffindex + 14);

                    byte[] smd5 = new byte[MD5Length];
                    Array.Copy(buff, buffindex + PacketHead, smd5, 0, MD5Length);
                    byte[] dmd5 = md5Pro.ComputeHash(buff, (int)buffindex + PacketHead + MD5Length, (int)PacketLength - PacketHead - MD5Length);
                    for (int i = 0; i < MD5Length; i++)
                    {
                        if (smd5[i] != dmd5[i]) datacorrect = false;
                    }
                    //验证数据正确性
                    if (datacorrect)
                    {
                        icPacket packet = new icPacket();
                        object data = null;
                        MemoryStream stream = new MemoryStream(buff, (int)buffindex + PacketHead + MD5Length, (int)PacketLength - PacketHead - MD5Length);
                        data = rformatter.Deserialize(stream);
                        packet.data = data;
                        packet.Serverid = SourServerid;
                        packet.Appid = (APPID)SourAppid;
                        packet.dataid = dataid;
                        ReceivedEventArgs e = new ReceivedEventArgs(packet);
                        ReceivedEvent(e);
                        socket.Send(icParse.makePacketReceived(DestServerid, DestAppid, SourServerid, SourAppid, 0, dataid));
                    }
                    else
                    {
                        socket.Send(icParse.makePacketErr(DestServerid, DestAppid, SourServerid, SourAppid, 0, dataid));
                    }
                }
            }
        }
        //解析
        private void ParseData(byte[] buff, UInt32 buffindex, UInt32 PacketLength)
        {
            int command = (buff[buffindex] + (buff[buffindex + 1] << 8));

            if (command == (int)COMMAND_ID.COMMAND_KEEP_ALIVE_RESPONSE)
            {
            }
            else if (command == (int)COMMAND_ID.COMMAND_REG_RESPONSE)
            {
                byte Regresult = buff[buffindex + 2];
                if (Regresult == 1)
                {
                    Reged  = true;
                    Reging = false;
                    sendblockEvent.Set();
                }
                else
                {
                    Reged  = false;
                    Reging = false;
                    sendblockEvent.Reset();
                    Exception e = new Exception("应用注册失败,同类应用可能已经在运行。");
                    if (ExceptionEvent != null)
                    {
                        ExceptionEvent(e);
                    }
                }
            }
            else if (command == (int)COMMAND_ID.COMMAND_PACKET_SERVERDOWN)
            {
                if (SendStatusEvent != null)
                {
                    UInt16 serverid = BitConverter.ToUInt16(buff, (int)buffindex + 2);
                    UInt32 dataid   = BitConverter.ToUInt32(buff, (int)buffindex + 4);
                    lock (Synsendinglist)
                    {
                        if (sendinglist.ContainsKey(dataid))
                        {
                            SendStatusEventArgs e = new SendStatusEventArgs(SENDSTATUS.PACKET_SERVERDOWN, sendinglist[dataid]);
                            sendinglist.Remove(dataid);
                            SendStatusEvent(e);
                        }
                    }
                }
            }
            else if (command == (int)COMMAND_ID.COMMAND_PACKET_APPDOWN)
            {
                if (SendStatusEvent != null)
                {
                    UInt16 serverid    = BitConverter.ToUInt16(buff, (int)buffindex + 2);
                    UInt16 sourceappid = BitConverter.ToUInt16(buff, (int)buffindex + 4);
                    UInt16 destappid   = BitConverter.ToUInt16(buff, (int)buffindex + 6);
                    UInt32 dataid      = BitConverter.ToUInt32(buff, (int)buffindex + 8);
                    lock (Synsendinglist)
                    {
                        if (sendinglist.ContainsKey(dataid))
                        {
                            SendStatusEventArgs e = new SendStatusEventArgs(SENDSTATUS.PACKET_APPDOWN, sendinglist[dataid]);
                            sendinglist.Remove(dataid);
                            SendStatusEvent(e);
                        }
                    }
                }
            }
            else if (command == (int)COMMAND_ID.COMMAND_PACKET_ERR)
            {
                if (SendStatusEvent != null)
                {
                    UInt32 dataid = BitConverter.ToUInt32(buff, (int)buffindex + 14);
                    lock (Synsendinglist)
                    {
                        if (sendinglist.ContainsKey(dataid))
                        {
                            SendStatusEventArgs e = new SendStatusEventArgs(SENDSTATUS.PACKET_ERR, sendinglist[dataid]);
                            sendinglist.Remove(dataid);
                            SendStatusEvent(e);
                        }
                    }
                }
            }
            else if (command == (int)COMMAND_ID.COMMAND_PACKET_RECEIVED)
            {
                if (SendStatusEvent != null)
                {
                    UInt32 dataid = BitConverter.ToUInt32(buff, (int)buffindex + 14);
                    lock (Synsendinglist)
                    {
                        if (sendinglist.ContainsKey(dataid))
                        {
                            sendinglist[dataid].outtime = DateTime.Now;
                            SendStatusEventArgs e = new SendStatusEventArgs(SENDSTATUS.PACKET_RECEIVED, sendinglist[dataid]);
                            sendinglist.Remove(dataid);
                            SendStatusEvent(e);
                        }
                    }
                }
            }
            else if (command == (int)COMMAND_ID.COMMAND_QUERY_SERVER_RESPONSE)
            {
                if (updateClientEvent != null)
                {
                    char[]             trimChars = { (char)0 };
                    List <ServerClass> servers   = new List <ServerClass>();
                    int    servercount           = BitConverter.ToUInt16(buff, (int)buffindex + 2);
                    UInt32 pos = buffindex + 4;
                    for (int i = 0; i < servercount; ++i)
                    {
                        ushort      serverid  = BitConverter.ToUInt16(buff, (int)pos); pos = pos + 2;
                        string      stationid = Encoding.Default.GetString(buff, (int)pos, 33).Trim(trimChars); pos = pos + 33;
                        byte        online    = buff[pos]; ++pos;
                        ServerClass s         = new ServerClass();
                        s.m_Serverid    = serverid;
                        s.m_szStationID = stationid;
                        s.isonline      = (online == 1);
                        servers.Add(s);
                    }
                    ClienUpdateEventArgs e = new ClienUpdateEventArgs(CLIENTUPDATE.updateServer);
                    e.data = servers;
                    updateClientEvent(e);
                }
            }
            else if ((command == (int)COMMAND_ID.COMMAND_QUERY_APP_RESPONSE) || (command == (int)COMMAND_ID.COMMAND_SYN_APP))
            {
                if (updateClientEvent != null)
                {
                    List <AppObj> applist  = new List <AppObj>();
                    UInt32        pos      = buffindex + 2;
                    ushort        serverid = BitConverter.ToUInt16(buff, (int)pos); pos = pos + 2;
                    ushort        appcount = BitConverter.ToUInt16(buff, (int)pos); pos = pos + 2;
                    for (int i = 0; i < appcount; ++i)
                    {
                        ushort appid = BitConverter.ToUInt16(buff, (int)pos); pos = pos + 2;
                        byte   isadd = buff[pos]; ++pos;
                        AppObj a     = new AppObj();
                        a.m_Serverid = serverid;
                        a.app        = (APPID)appid;
                        a.isonline   = (isadd == 1);
                        applist.Add(a);
                    }
                    ClienUpdateEventArgs e = new ClienUpdateEventArgs(CLIENTUPDATE.updateApp);
                    e.data = applist;
                    updateClientEvent(e);
                }
            }
            //接受到数据包
            else if (command == (int)COMMAND_ID.COMMAND_PACKET)
            {
                if (ReceivedEvent != null)
                {
                    const int CommnadSize    = 2;  //命令大小
                    const int ConnectSize    = 12; //连接大小
                    const int DataidSize     = 4;  //数据块编号大小
                    const int DataLengthSize = 4;  //数据块长度大小
                    const int DataOffsetSize = 4;  //数据块偏移大小
                    const int MD5Length      = 16;
                    const int PacketHead     = CommnadSize + ConnectSize + DataidSize + DataLengthSize + DataOffsetSize;
                    bool      datacorrect    = true;
                    UInt16    SourServerid   = BitConverter.ToUInt16(buff, (int)buffindex + 2);
                    UInt16    DestServerid   = BitConverter.ToUInt16(buff, (int)buffindex + 4);
                    UInt16    SourAppid      = BitConverter.ToUInt16(buff, (int)buffindex + 6);
                    UInt16    DestAppid      = BitConverter.ToUInt16(buff, (int)buffindex + 8);
                    UInt32    connid         = BitConverter.ToUInt32(buff, (int)buffindex + 10);
                    UInt32    dataid         = BitConverter.ToUInt32(buff, (int)buffindex + 14);

                    byte[] smd5 = new byte[MD5Length];
                    Array.Copy(buff, buffindex + PacketHead, smd5, 0, MD5Length);
                    byte[] dmd5 = md5Pro.ComputeHash(buff, (int)buffindex + PacketHead + MD5Length, (int)PacketLength - PacketHead - MD5Length);
                    for (int i = 0; i < MD5Length; i++)
                    {
                        if (smd5[i] != dmd5[i])
                        {
                            datacorrect = false;
                        }
                    }
                    //验证数据正确性
                    if (datacorrect)
                    {
                        icPacket     packet = new icPacket();
                        object       data   = null;
                        MemoryStream stream = new MemoryStream(buff, (int)buffindex + PacketHead + MD5Length, (int)PacketLength - PacketHead - MD5Length);
                        data            = rformatter.Deserialize(stream);
                        packet.data     = data;
                        packet.Serverid = SourServerid;
                        packet.Appid    = (APPID)SourAppid;
                        packet.dataid   = dataid;
                        ReceivedEventArgs e = new ReceivedEventArgs(packet);
                        ReceivedEvent(e);
                        socket.Send(icParse.makePacketReceived(DestServerid, DestAppid, SourServerid, SourAppid, 0, dataid));
                    }
                    else
                    {
                        socket.Send(icParse.makePacketErr(DestServerid, DestAppid, SourServerid, SourAppid, 0, dataid));
                    }
                }
            }
        }