亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來(lái)到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? serverunit.pas

?? IPXControl: 本軟件是一個(gè)免費(fèi)控件
?? PAS
?? 第 1 頁(yè) / 共 2 頁(yè)
字號(hào):
//===================================================================//
//多用戶語(yǔ)音聊天服務(wù)器                                               //
//接收格式:含有Rain_Private:頭的是該用戶的私聊列表。                //
//          含有Rain_MSG:頭的是需轉(zhuǎn)發(fā)的消息。                        //
//發(fā)送格式:更新在線用戶列表:Rain_Update:+OnLinUserList             //
//          轉(zhuǎn)發(fā)消息:去掉Rain_MSG:頭后發(fā)送                          //
//===================================================================//
unit ServerUnit;

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  Menus, ExtCtrls, ComCtrls, Buttons, ScktComp,ShellApi,registry, NMUDP;
type UToUs = record
     User:string;
     Users:array of string;
     RemoteAddress:string;
     BroadFlag:Boolean;
end;
type ServerStatus=(SS_NOT_RUNNING,SS_RUNNING);
type LogEntryType=(LET_WARNING,LET_ERROR,LET_SIGNON,LET_SIGNOFF);
type ServerNotification=(SN_LOGON,SN_LOGOFF,SN_PUBLIC_MSG,SN_PRIVATE_MSG,SN_UPDATE_UToUs);
const CHAT_SERVER_PORT=6778;
      WM_MYICON=WM_USER+1001;
type
  TChatServer = class(TForm)
    ChatServerStatusBar: TStatusBar;
    ConnectionsListView: TListView;
    LogEntryListView: TListView;
    Bevel1: TBevel;
    MainMenu1: TMainMenu;
    StartStopServerMenuItem: TMenuItem;
    X1: TMenuItem;
    H1: TMenuItem;
    AboutMenuItem: TMenuItem;
    Panel1: TPanel;
    Splitter1: TSplitter;
    SpeedButton1: TSpeedButton;
    ChatServerSocket: TServerSocket;
    PopupMenu1: TPopupMenu;
    RestorePopItem: TMenuItem;
    StartStopServerPopItem: TMenuItem;
    N2: TMenuItem;
    ExitPopItem: TMenuItem;
    AutoRunMenuItem: TMenuItem;
    F1: TMenuItem;
    N3: TMenuItem;
    A1: TMenuItem;
    NMUDP1: TNMUDP;
    procedure FormCreate(Sender: TObject);
    procedure StartStopServerMenuItemClick(Sender: TObject);
    procedure ChatServerSocketClientConnect(Sender: TObject;
      Socket: TCustomWinSocket);
    procedure ChatServerSocketClientDisconnect(Sender: TObject;
      Socket: TCustomWinSocket);
    procedure ChatServerSocketClientError(Sender: TObject;
      Socket: TCustomWinSocket; ErrorEvent: TErrorEvent;
      var ErrorCode: Integer);
    procedure ChatServerSocketClientRead(Sender: TObject;
      Socket: TCustomWinSocket);
    procedure RestorePopItemClick(Sender: TObject);
    procedure StartStopServerPopItemClick(Sender: TObject);
    procedure X1Click(Sender: TObject);
    procedure ExitPopItemClick(Sender: TObject);
    procedure AutoRunMenuItemClick(Sender: TObject);
    procedure SpeedButton1Click(Sender: TObject);
    procedure FormPaint(Sender: TObject);
    procedure AboutMenuItemClick(Sender: TObject);
    procedure A1Click(Sender: TObject);
    procedure NMUDP1DataReceived(Sender: TComponent; NumberBytes: Integer;
      FromIP: String; Port: Integer);
  private
      CurrentServerStatus:ServerStatus;
      procedure UpdateTrayTip;
      procedure MaxTray(Sender: TObject);
      procedure MiniTray(Sender: TObject);
      procedure WMmyicon(var MSG:Tmessage);

      procedure IdleEventResponse(Sender:TObject;var Done:Boolean);
      procedure SetServerStatus(_serverstatus:ServerStatus);
      procedure AddConnectionToListView(ClientSocket: TCustomWinSocket);
      procedure RemoveConnectionFromListView(Socket: TCustomWinSocket);
      procedure UpdateStatusBar(DecUse:Boolean);
      procedure AddLogEntry(let:LogEntryType;EntryText:AnsiString);
      procedure SetUserBySocket(Socket: TCustomWinSocket;const UserNickName:AnsiString);
      procedure GetUserBySocket(Socket: TCustomWinSocket;var UserNickName:AnsiString);
      procedure GetSocketByUser(PrivateName:string;var PrivateSocket:TCustomWinsocket);
      function  ListItemBySocket(Socket: TCustomWinSocket):TListItem;
      procedure BroadcastMessage(Message:AnsiString;ExcludeSocket: TCustomWinSocket);
      procedure GetOnLineUserList(var OnLineUserList:string);
      procedure SendNotification(sn:ServerNotification;additional:AnsiString;ExcludeSocket: TCustomWinSocket);
      procedure UpdateUToUs(str:string;usernickName:string);
      procedure ADDUToUs(UserNickName:string;RemoteAddress:string);
      procedure DELUToUs(UserNickName:string);
      function GetUserID(UserName:string):Integer;
      function GetRemoteAddressByUser(UserName:string):string;
  public
    { Public declarations }
  end;
var
  ChatServer: TChatServer;
  Pnid:NOTIFYICONDATA;
  CanPaint:Boolean;
  UserToUsers:array of UToUs;
implementation

{$R *.DFM}

procedure TChatServer.FormCreate(Sender: TObject);
var
  RegF:TRegistry;
begin
  Application.OnIdle:=IdleEventResponse;
  Application.OnMinimize:=MiniTray;
  Application.OnRestore:=MaxTray;
//  Application.OnMessage:=WMmyIcon;
  CurrentServerStatus:=SS_NOT_RUNNING;
  ChatServerSocket.port:=CHAT_SERVER_PORT;
  CanPaint:=True;
  Pnid.cbSize:=sizeof(NOTIFYICONDATA);
  Pnid.Wnd:=AllocateHWnd(WmMyIcon);                             //
  Pnid.uID:=1;
  Pnid.uFlags:=NIF_TIP or NIF_ICON or NIF_MESSAGE;
  Pnid.uCallbackMessage:=WM_MYICON;                          //
  Pnid.hIcon:=Application.Icon.Handle;

  RegF:=TRegistry.Create;
  RegF.RootKey:=HKEY_LOCAL_MACHINE;
  AutoRunMenuItem.Checked:=False;
   try
     RegF.OpenKey('SOFTWARE\Microsoft\Windows\CurrentVersion\Run',True);
     if  RegF.ValueExists('MultiChat') then
        if (RegF.ReadString('MultiChat')=Application.ExeName) then
            AutoRunMenuItem.Checked:=True;

  finally
    RegF.CloseKey;
    RegF.Free;
  end;
  if AutoRunMenuItem.Checked then
  begin
      StartStopServerMenuItemClick(application);
  end;
end;

procedure TChatServer.IdleEventResponse(Sender:TObject;var Done:Boolean);
begin
  if (CurrentServerStatus<>SS_RUNNING) then
  begin
    StartStopServerMenuItem.Caption:='啟動(dòng)聊天服務(wù)器(&S)';
    StartStopServerPopItem.Caption:='啟動(dòng)聊天服務(wù)器(&S)';
    SpeedButton1.Hint:='啟動(dòng)聊天服務(wù)器';
  end
  else
  begin
    StartStopServerMenuItem.Caption:='關(guān)閉聊天服務(wù)器(&C)';
    StartStopServerPopItem.Caption:='關(guān)閉聊天服務(wù)器(&C)';
    SpeedButton1.Hint:='關(guān)閉聊天服務(wù)器';
  end;
end;

procedure TChatServer.AddLogEntry(let:LogEntryType;EntryText:AnsiString);
var
   Item:TListItem;
   entrytype:AnsiString;
   procedure EntryTypeToText(let:LogEntryType; var text :AnsiString);
   begin
      case let of
      LET_WARNING:
           begin
              text:='敬告';
           end;
      LET_ERROR:
           begin
              text:='錯(cuò)誤';
           end;
      LET_SIGNON:
           begin
              text:='用戶進(jìn)入';
           end;
      LET_SIGNOFF:
           begin
              text:='用戶離開(kāi)';
           end;
      else
           begin
              text:='不知道';
           end;
      end;//case
   end;//function

begin
   item:=LogEntryListview.Items.Add;
   EntryTypeToText(let,entrytype);
   item.Caption:=entrytype;
   item.SubItems.Add(EntryText);
   Item.SubItems.Add(DateTimeToStr(Now));
end;

procedure TChatServer.SetServerStatus(_serverstatus:ServerStatus);
begin
  CurrentServerStatus:=_serverstatus;
end;

procedure TChatServer.StartStopServerMenuItemClick(Sender: TObject);
begin
  case CurrentServerStatus of
  SS_NOT_RUNNING:
    begin
      ChatServerSocket.Open;
      SetServerStatus(SS_RUNNING);
      AddLogEntry(LET_WARNING,'服務(wù)器已起動(dòng)...');
    end;
  SS_RUNNING:
    begin
      ChatServerSocket.Close;
      SetServerStatus(SS_NOT_RUNNING);
      AddLogEntry(LET_WARNING,'服務(wù)器已停止...');
    end;
  end;//case
  UpdateStatusBar(False);
  UpdateTrayTip;
end;

procedure TChatServer.AddConnectionToListView(ClientSocket: TCustomWinSocket);
var
   UserNickName:AnsiString;
   TempItem:TListItem;
begin
   UserNickName:='未知名';
   TempItem:=ConnectionsListView.Items.Add;
   TempItem.Caption:=UserNickName;
   TempItem.SubItems.Add(ClientSocket.RemoteHost);
   TempItem.SubItems.Add(DateTimeToStr(Now));
   TempItem.Data:=ClientSocket;//保存
end;

function TChatServer.ListItemBySocket(Socket: TCustomWinSocket):TListItem;
var
   i:integer;
begin
   for i:=0 to ConnectionsListView.Items.Count-1 do  /////////////////////////
   begin
      if TCustomWinSocket(ConnectionsListView.Items.Item[i].Data)=Socket then
      begin
         Result:=ConnectionsListView.Items.Item[i];
         Exit;
      end;
   end;
   Result:=nil;
end;

procedure TChatServer.RemoveConnectionFromListView(Socket: TCustomWinSocket);
var
   Item:TListItem;
   UserNickName:string;
begin
   Item:=ListItemBySocket(Socket);
   if Item<>nil then
   begin
       UserNickName:=ConnectionsListview.Items[item.index].Caption;
       ConnectionsListview.Items.Delete(item.index);
       DELUToUs(UserNickName);
   end;
end;

procedure TChatServer.SetUserBySocket(Socket: TCustomWinSocket;const UserNickName:AnsiString);
var
   Item:TListItem;
begin
   Item:=ListItemBySocket(Socket);
   if Item<>nil then
       Item.Caption:=UserNickName;
   ADDUToUs(UserNickName,Socket.RemoteAddress);
end;

procedure TChatServer.GetSocketByUser(PrivateName:string;var PrivateSocket:TCustomWinsocket);
var
   i:Integer;
begin
   for i:=0 to ConnectionsListView.Items.Count-1 do  /////////////////////////
   begin
      if ConnectionsListView.Items.Item[i].Caption = PrivateName then
      begin
         PrivateSocket:=TCustomWinSocket(ConnectionsListView.Items.Item[i].Data);
         Exit;
      end;
   end;
   PrivateSocket:=nil;
end;
procedure TChatServer.GetUserBySocket(Socket: TCustomWinSocket;var UserNickName:AnsiString);
var
   Item:TListItem;
begin
   Item:=ListItemBySocket(Socket);
   if Item<>nil then
     UserNickName:=Item.Caption
   else
     UserNickName:='未知名';
end;

procedure TChatServer.UpdateStatusBar(DecUse:Boolean);
begin
  case CurrentServerStatus of
  SS_NOT_RUNNING:
      begin
         ChatServerStatusBar.Panels[0].Text:='在菜單中選啟動(dòng)服務(wù)器...';
      end;
  SS_RUNNING:
      begin
        if DecUse then
          ChatServerStatusBar.Panels[0].Text:='在線用戶有'+
                           IntToStr(ChatServerSocket.Socket.ActiveConnections-1)+'位'
        else
          ChatServerStatusBar.Panels[0].Text:='在線用戶有'+
                           IntToStr(ChatServerSocket.Socket.ActiveConnections)+'位';
      end;
  end;//case
end;

procedure TChatServer.ChatServerSocketClientConnect(Sender: TObject;
  Socket: TCustomWinSocket);
begin
     Socket.Data:=nil;
     AddConnectionToListView(Socket);
     UpdateStatusBar(False);
     UpdateTrayTip;
end;

procedure TChatServer.SendNOtification(sn:ServerNotification;additional:AnsiString;ExcludeSocket: TCustomWinSocket);
var
   UserNickName:AnsiString;
   MsgToSend:AnsiString;
   OnLineUserList:string;
   PrivateSocket:TCustomWinSocket;
   j,N:integer;
begin
   GetUserBySocket(ExcludeSocket,UserNickName);  //獲得用戶名
   case sn of
   SN_LOGON:
     begin
       AddLogEntry(LET_SIGNON,UserNickName);
       GetOnLineUserList(OnLineUserList);
       //Message: Rain_Update:Test1,Test2,\ntest1...'
       BroadcastMessage('Rain_Update:'+OnLineUserList+'\n'
                         +UserNickName+' 進(jìn)入聊天室!!!',ExcludeSocket);
     end;
   SN_LOGOFF:
     begin
       AddLogEntry(LET_SIGNOFF,UserNickName);
       GetOnLineUserList(OnLineUserList);
       //Delete UserNickName
       //test1,test2,test3,
       //Rain_Update:test1,test2,\ntest1...
       Delete(OnLineUserList,Pos(UserNickName,OnLineUserList),Length(UserNickName)+1);
       BroadcastMessage('Rain_Update:'+OnLineUserList+'\n'
                         +UserNickName+' 離開(kāi)了!!!',ExcludeSocket);

     end;
   SN_PUBLIC_MSG:
     begin
       //去掉頭Rain_MSG:
       Delete(additional,1,Length('Rain_MSG:'));
       MsgToSend:='<'+UserNickName+'>'+additional;
       BroadcastMessage(MsgToSend,ExcludeSocket);
     end;
   SN_PRIVATE_MSG:    //悄悄話
     begin
       //去掉頭Rain_MSG:
       Delete(additional,1,Length('Rain_MSG:'));
       N:=GetUserID(UserNickName);
       for j:=0 to High(UserToUsers[N].Users) do
       begin

?? 快捷鍵說(shuō)明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲乱码国产乱码精品精98午夜| 午夜欧美大尺度福利影院在线看| 欧美日韩亚洲综合在线| 精品一区二区在线看| 亚洲视频一二三| 精品日韩99亚洲| 91成人国产精品| 国产成人高清在线| 另类小说综合欧美亚洲| 亚洲激情五月婷婷| 日韩成人午夜电影| 中文字幕日韩一区| 久久婷婷色综合| 日韩午夜在线影院| 欧美自拍丝袜亚洲| 色系网站成人免费| 99国产欧美久久久精品| 国产一区二区三区四区五区美女| 丝袜诱惑制服诱惑色一区在线观看 | 日韩一区和二区| 色999日韩国产欧美一区二区| 国产成人精品三级麻豆| 精品无码三级在线观看视频| 美女在线观看视频一区二区| 天天射综合影视| 偷拍一区二区三区四区| 亚洲国产精品综合小说图片区| 亚洲色图一区二区三区| 中文字幕亚洲一区二区va在线| 中文字幕第一页久久| 国产精品丝袜在线| 国产精品久久免费看| 国产精品亲子伦对白| 一本一本大道香蕉久在线精品| 精品国产乱码久久久久久久久 | 亚洲一二三四在线观看| 中文字幕色av一区二区三区| 亚洲国产高清不卡| 中文幕一区二区三区久久蜜桃| 久久久久一区二区三区四区| 久久久久久久久久久久久久久99| 精品国产乱码久久久久久久久| 久久众筹精品私拍模特| 国产亚洲一区字幕| 国产精品成人一区二区艾草| 亚洲人成小说网站色在线| 亚洲人xxxx| 午夜精品久久久久久久久| 青青草国产精品97视觉盛宴| 美洲天堂一区二卡三卡四卡视频| 精品一区二区三区免费视频| 国产九色精品成人porny| 成人高清视频在线观看| 99久久夜色精品国产网站| 欧美性大战xxxxx久久久| 91精品国产综合久久香蕉麻豆 | 国产欧美日韩卡一| 中文字幕成人网| 伊人夜夜躁av伊人久久| 亚洲国产精品久久久男人的天堂| 日韩av中文字幕一区二区三区| 美女视频网站黄色亚洲| 国产91精品久久久久久久网曝门| 99精品视频在线观看| 欧美日韩精品高清| 久久影院电视剧免费观看| 国产精品亲子乱子伦xxxx裸| 亚洲精品免费在线播放| 日韩经典一区二区| 国产大陆亚洲精品国产| 91久久国产最好的精华液| 欧美高清hd18日本| 亚洲国产精品ⅴa在线观看| 亚洲精选视频在线| 免费成人av在线| 99免费精品视频| 欧美精品久久天天躁| 日本一区二区动态图| 无码av免费一区二区三区试看 | 欧美日韩极品在线观看一区| 久久综合色一综合色88| 亚洲欧美日韩在线不卡| 久久精品久久99精品久久| 波多野结衣在线aⅴ中文字幕不卡| 欧美区在线观看| 国产蜜臀97一区二区三区| 午夜精品影院在线观看| 懂色av噜噜一区二区三区av| 欧美无乱码久久久免费午夜一区| 精品电影一区二区三区| 亚洲一区二区三区影院| 国产超碰在线一区| 6080国产精品一区二区| 亚洲欧美激情插| 国产成人8x视频一区二区 | 国产精品久久久久精k8| 青青草97国产精品免费观看| 99国产精品99久久久久久| 日韩精品一区二区三区视频| 一区二区国产盗摄色噜噜| 国产激情偷乱视频一区二区三区| 欧美日韩国产高清一区二区 | 99精品欧美一区二区蜜桃免费 | 一区在线播放视频| 激情小说欧美图片| 欧美日韩国产首页在线观看| 国产精品麻豆一区二区| 国产麻豆精品在线| 欧美不卡视频一区| 日韩精品一卡二卡三卡四卡无卡| 色婷婷久久综合| 国产精品你懂的在线欣赏| 国产美女视频一区| 欧美精品一区二区三区四区 | 国产在线精品一区二区| 91精品国产全国免费观看| 一区二区三区精品| 91蝌蚪国产九色| 国产精品国产三级国产普通话蜜臀 | 精品少妇一区二区| 日本视频免费一区| 337p亚洲精品色噜噜噜| 亚洲成人精品影院| 欧美日韩国产123区| 亚洲一区二区三区在线播放| 色成年激情久久综合| 亚洲精品乱码久久久久久久久 | 欧美成人女星排行榜| 天天操天天干天天综合网| 在线精品国精品国产尤物884a| 亚洲欧美偷拍卡通变态| 色女孩综合影院| 亚洲欧美aⅴ...| 色美美综合视频| 一区二区三区日韩在线观看| 色狠狠av一区二区三区| 亚洲午夜精品久久久久久久久| 欧美午夜视频网站| 亚洲午夜精品一区二区三区他趣| 欧美在线观看视频一区二区| 一区二区三区鲁丝不卡| 欧美日韩国产一区| 美腿丝袜亚洲三区| 久久久噜噜噜久噜久久综合| 国产91在线|亚洲| 国产精品美女久久久久aⅴ国产馆| www.日本不卡| 亚洲精品老司机| 欧美影院一区二区| 三级一区在线视频先锋| 日韩三级伦理片妻子的秘密按摩| 国产在线精品视频| 国产精品美日韩| 欧美午夜精品久久久久久孕妇 | 韩国精品免费视频| 国产精品视频麻豆| 色久综合一二码| 麻豆高清免费国产一区| 国产日产欧美一区二区视频| 成人免费视频视频| 一区二区三区 在线观看视频| 欧美日韩一二三区| 国内精品伊人久久久久av一坑 | 亚洲国产视频网站| 91精品免费在线| 成人一级视频在线观看| 一区二区三区中文字幕在线观看| 欧美日韩另类一区| 国产一区二区美女诱惑| 亚洲三级在线观看| 日韩美女视频在线| 北条麻妃一区二区三区| 天涯成人国产亚洲精品一区av| 精品国产sm最大网站免费看| 97aⅴ精品视频一二三区| 免费成人美女在线观看.| 国产精品人人做人人爽人人添| 欧美亚洲日本国产| 国产剧情一区二区三区| 亚洲高清视频在线| 亚洲国产精品成人久久综合一区 | 欧美视频在线一区| 国产成人亚洲综合a∨婷婷| 一区二区久久久久久| 国产亚洲一二三区| 91超碰这里只有精品国产| 大白屁股一区二区视频| 天天综合网 天天综合色| 国产精品久久久久久久久晋中 | 欧美一级二级在线观看| 97超碰欧美中文字幕| 精品一区二区三区免费| 亚洲成人激情av| 中文字幕一区二| 久久久www成人免费无遮挡大片| 欧美伊人精品成人久久综合97| 丰满亚洲少妇av| 黑人巨大精品欧美一区| 亚洲国产裸拍裸体视频在线观看乱了 | 国产成a人无v码亚洲福利|